#!/bin/sh
set -e

./autogen.sh

if [ "x$ARCH" = "xnative" ]; then
	# test autotools
	./configure
	make -j 4 distcheck

	# make distribution
	make dist
	tar zxvf libressl-*.tar.gz
	cd libressl-*
	mkdir build-static
	mkdir build-shared

	cd build-static

	# test cmake and ninja
	if [ `uname` = "Darwin" ]; then
		cmake ..
		make
		make test

		cd ../build-shared
		cmake -DBUILD_SHARED_LIBS=ON ..
		make
		make test
	else
		sudo apt-get update
		sudo apt-get install -y cmake ninja-build

		cmake -GNinja ..
		ninja
		ninja test

		cd ../build-shared
		cmake -GNinja -DBUILD_SHARED_LIBS=ON ..
		ninja
		ninja test
	fi

elif [ "x$ARCH" = "xmingw32" -o "x$ARCH" = "xmingw64" ]; then
	sudo apt-get update
	sudo apt-get install -y cmake ninja-build

	CPU=i686
	if [ "x$ARCH" = "xmingw64" ]; then
		CPU=x86_64
	fi
	export CC=$CPU-w64-mingw32-gcc

	if [ -z $(which $CC) ]; then
		sudo apt-get update
		sudo apt-get install -y mingw-w64 make
		export PATH=$PATH:/opt/$ARCH/bin
	fi

	./configure --host=$CPU-w64-mingw32
	make -j

	(
	 rm -fr build-static
	 mkdir build-static
	 cd build-static
	 cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../scripts/$CPU-w64-mingw32.cmake ..
	 ninja
	)
	(
	 rm -fr build-shared
	 mkdir build-shared
	 cd build-shared
	 cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../scripts/$CPU-w64-mingw32.cmake -DBUILD_SHARED_LIBS=ON ..
	 ninja
	)

elif [ "x$ARCH" = "xarm32" -o "x$ARCH" = "xarm64" ]; then
	sudo apt-get update
	sudo apt-get install -y qemu-user-static binfmt-support

	if [ "x$ARCH" = "xarm32" ]; then
		sudo apt-get install -y g++-arm-linux-gnueabihf
		sudo ln -s /usr/arm-linux-gnueabihf/lib /lib/arm-linux-gnueabihf
		sudo ln -s /lib/arm-linux-gnueabihf/ld-2.27.so /lib/ld-linux-armhf.so.3
		export CC=arm-linux-gnueabihf-gcc
		./configure --host=arm-linux
	else
		sudo apt-get install -y g++-aarch64-linux-gnu
		sudo ln -s /usr/aarch64-linux-gnu/lib/ /lib/aarch64-linux-gnu
		sudo ln -s /lib/aarch64-linux-gnu/ld-2.27.so /lib/ld-linux-aarch64.so.1
		export CC=aarch64-linux-gnu-gcc
		./configure --host=aarch64-linux
	fi

	make -j 4 check
	file apps/openssl/.libs/openssl

elif [ "x$ARCH" = "xandroid" ]; then
	touch $HOME/.android/repositories.cfg
	echo "##### Date: `date` install NDK and build tools"
	echo y | sdkmanager 'platforms;android-30' > /dev/null 2>&1
	echo "##### Date: `date` platforms;android installed"
	echo y | sdkmanager 'ndk-bundle' > /dev/null 2>&1
	echo "##### Date: `date` ndk-bundle installed"
	echo y | sdkmanager 'ndk;22.1.7171670'
	echo "##### Date: `date` ndk installed"
	echo y | sdkmanager 'cmake;3.18.1'
	echo "##### Date: `date` cmake installed"

	echo "##### Date: `date` sdkmanager --list"
	sdkmanager --list

	export CMAKE=$ANDROID_HOME/cmake/3.18.1/bin/cmake
	export NINJA=$ANDROID_HOME/cmake/3.18.1/bin/ninja
	export ANDROID_NDK_HOME=$ANDROID_HOME/ndk-bundle
	export TC_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake

	# set target API level and architecture
	level_arch=""
	level=$MIN_NAL
	while [ $level -le $MAX_NAL ]
	do
		level_arch="$level_arch $level;x86_64"
		level_arch="$level_arch $level;x86"
		level_arch="$level_arch $level;arm64-v8a"

		level=`expr $level + 1`
	done

	echo "##### level_arch = $level_arch"

	# build each API level and architecture
	for la in $level_arch
	do
		NAL=`echo $la | cut -d ';' -f 1`
		ABI=`echo $la | cut -d ';' -f 2`
		echo ""
		echo "##### Date: `date`, Native API level: $NAL, ABI: $ABI"

		(
		 build_dir=build_$NAL_$ABI
		 rm -fr $build_dir
		 mkdir $build_dir
		 cd $build_dir
		 $CMAKE -GNinja -DCMAKE_MAKE_PROGRAM=$NINJA \
		 -DANDROID_NDK=$ANDROID_NDK_HOME \
		 -DCMAKE_TOOLCHAIN_FILE=$TC_FILE \
		 -DANDROID_ABI=$ABI -DANDROID_NATIVE_API_LEVEL=$NAL ..

		 $NINJA -j 4

		 echo ""
		 file apps/openssl/openssl
		)
	done
fi
